package org.example.cdpcrpbackend.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.example.cdpcrpbackend.controller.dto.*;
import org.example.cdpcrpbackend.domain.ActivityAttend;
import org.example.cdpcrpbackend.service.ActivityAttendService;
import org.example.cdpcrpbackend.service.ActivityService;
import org.example.cdpcrpbackend.util.JwtTool;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/activity")
@RequiredArgsConstructor
public class ActivityController {
    private final ActivityService service;
    private final ActivityAttendService attendService;

    /**
     * 活动-搜索
     */
    @GetMapping("/search")
    public Result search(@RequestParam("key") String keyword) {
        List<Activity1> list;
        if (keyword == null || keyword.isEmpty()) {
            list = service.listBrief();
        } else {
            list = service.search(keyword);
        }
        return Result.success(list);
    }

    /**
     * 活动-简洁列表
     * - 活动名称
     * - 活动封面
     * - 活动标题
     */
    @GetMapping("/brief")
    public Result listBrief() {
        List<Activity1> list = service.listBrief();
        return Result.success(list);
    }


    /**
     * 我的-组织活动-列表
     * 当前学生所在部门尚未结束的活动，结束时间升序
     *
     * @param id 学号
     */
    @GetMapping("/dep-stu-id/{id}")
    public Result listDepStuId(@PathVariable("id") String id) {
        List<Activity3> list = service.listDepStuId(id);
        return Result.success(list);
    }


    /**
     * 活动-活动详情
     * 使用 JWT token 的原因，是为了获取当前登录用户的学号，用于判断是否已报名
     *
     * @param id   活动 id
     * @param auth JWT
     */
    @GetMapping("/detail/{id}")
    public Result detail(@PathVariable("id") Integer id,
                         @RequestHeader("Authorization") String auth) {
        Activity2 activity = service.detailById(id);
        if (auth == null || auth.isEmpty()) {
            return Result.success(activity);
        }

        // 解析 token 获取用户 id
        String studentId = JwtTool.getUid(auth);

        // 查询学生是否已报名
        LambdaQueryWrapper<ActivityAttend> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ActivityAttend::getActivityId, id)
                .eq(ActivityAttend::getStudentId, studentId);
        ActivityAttend one = attendService.getOne(wrapper);

        activity.setIsAttend(one != null);
        return Result.success(activity);
    }


    /**
     * 我的-已参与的活动-列表
     * 当前学生已经报名参加的活动列表
     *
     * @param auth JWT 获取学号
     */
    @GetMapping("/attend")
    public Result listAttend(@RequestHeader("Authorization") String auth) {
        String studentId = JwtTool.getUid(auth);
        List<ActivityAttend1> list = service.listAttend(studentId);
        return Result.success(list);
    }
}
